package com.unitd.frame.springweb.editor;

import org.springframework.util.StringUtils;

import java.beans.PropertyEditorSupport;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @desc 自定义的SpringMVC的属性日期绑定对象
 * @filename CustomDateEditor.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2017/11/13
 */
public class CustomDateEditor extends PropertyEditorSupport {

	/** 是否允许为空 */
	private final boolean allowEmpty;
	/** 日期格式化对象 */
	private DateFormat dateFormat;

	/**
	 * @desc 构造方法
	 * @param allowEmpty 是否允许为空
	 */
	public CustomDateEditor(boolean allowEmpty) {
		this.allowEmpty = allowEmpty;
	}

	/**
	 * @desc 设置SpringMVC的属性日期绑定对象的显示格式
	 * @param text 时间值
	 * @throws IllegalArgumentException
	 */
	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		if (this.allowEmpty && !StringUtils.hasText(text)) {
			setValue(null);
			return;
		}
		try {
			if (text.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}")) {
				this.dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			} else if (text.matches("\\d{4}年\\d{2}月\\d{2}日")) {
				this.dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
			} else if (text.matches("\\d{4}\\.\\d{2}\\.\\d{2}")) {
				this.dateFormat = new SimpleDateFormat("yyyy.MM.dd");
			} else {
				this.dateFormat = new SimpleDateFormat("yyyy-MM-dd");
			}
			this.dateFormat.setLenient(false);
			setValue(this.dateFormat.parse(text));
		} catch (ParseException ex) {
			throw new IllegalArgumentException("Could not parse date: " + ex.getMessage(), ex);
		}
	}

	/**
	 * @desc 获取格式化后的时间对象值
	 * @return 时间对象值
	 */
	@Override
	public String getAsText() {
		Date value = (Date) getValue();
		if (this.dateFormat != null) {
			this.dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		}
		return (value != null ? this.dateFormat.format(value) : "");
	}
}